package 简单.链表;

import util.ListNode;

/**
 * 给你单链表的头节点 head ，请你反转链表，并返回反转后的链表。
 * <p>
 * 来源：https://leetcode-cn.com/problems/reverse-linked-list/description/
 */
public class 反转链表_206 {

    public static void main(String[] args) {
        ListNode listNode1 = new ListNode(1);
        ListNode listNode2 = new ListNode(2);
        ListNode listNode3 = new ListNode(3);
        ListNode listNode4 = new ListNode(4);
        listNode1.next = listNode2;
        listNode2.next = listNode3;
        listNode3.next = listNode4;
        reverseList(listNode1).list();


    }

    /**
     * 双指针
     *
     * @param head
     * @return
     */
    public static ListNode reverseList(ListNode head) {
        ListNode pre = null;
        ListNode cur = head;
        while (cur != null) {
            //保存下一个节点
            ListNode next = cur.next;
            //指针指向下一个节点改为指向前一个节点
            cur.next = pre;
            //pre，cur步进1步
            pre = cur;
            cur = next;
        }
        return pre;
    }

    //TODO 递归解法

}
